package com.album.utils;

import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Debug;
import android.util.Log;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * @author  Devin.Hu
 * @date 2011-6-24
 * @version V1.0 
 * @description JsonUtils工具类：采用Gson，google的一个开源项目,实现json对象的解析以及json对象跟java对象的互转
 */
public class JsonUtils {

	/**
	 * 将java对象转换成json对象
	 * @param obj
	 * @return
	 */
	public static String parseObj2Json(Object obj){
		
		if(null == obj)return null;
		
        Gson gson=new Gson();
        String objstr=gson.toJson(obj);
        if(Debug.isDebuggerConnected()){
        	Log.i("parseObj2Json", objstr);
        }
        return objstr;
	}
	
	
	/**
	 * 将java对象的属性转换成json的key
	 * @param obj
	 * @return
	 */
	public static String parseObj2JsonOnField(Object obj){
		
		if(null == obj)return null;
		
		Gson gson=new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
        String objstr=gson.toJson(obj);
        if(Debug.isDebuggerConnected()){
        	Log.i("parseObj2JsonOnField", objstr);
        }
        return objstr;
	}
	
	/**
	 * 将json对象转换成java对象
	 * @param <T>
	 * @param jsonData
	 * @param c
	 * @return
	 */
	public static <T> Object parseJson2Obj(String jsonData, Class<T> c) {
		
		if(null==jsonData)return null;
		
		Gson gson = new Gson();
		Object obj = gson.fromJson(jsonData, c); 
		if(Debug.isDebuggerConnected()){
        	Log.i("parseJson2Obj", obj.toString());
        }
		return obj;
	}

	/**
	 * 将json对象转换成数组对象
	 * @param <T>
	 * @param jsonData
	 * @param c
	 * @return
	 * @throws JSONException 
	 */
	public static <T> ArrayList<T> parseJson2List(String jsonData,Class<T> c) throws JSONException {
		
		if(null==jsonData || "".equals(jsonData))return null;
		
		Gson gson = new Gson();
		ArrayList<T> list = new ArrayList<T>();
		JSONArray jsonArray = new JSONArray(jsonData);
		JSONObject objItem = null;
		T objT = null;
		
		for (int i = 0; i < jsonArray.length(); i++) {
			objItem = (JSONObject) jsonArray.get(i);
			if(null != objItem){
				objT = gson.fromJson(objItem.toString(), c);
				list.add(objT);
			}
	    }
		
		if(Debug.isDebuggerConnected()){
        	Log.i("parseJson2List", list.toString());
        }
		return list;
	}
}